import { defineStore } from 'pinia';
import curdUtils from "/@/stores/ums/customer/curdUtils";
import { customerFieldStateApi as api } from "/@/api/ums/customer/fieldStateApi";
import {ElMessage} from "element-plus";

const map = new Map()

/**
 * 客户表格头 - 全局缓存
 */
export const customerTableHeaderCache = defineStore('customerTableHeader', {
	state: ():any => ({
		// 客户表格头 - 列表
		list: [],
		// 客户表格头  - get 加载的锁
		lock: false,
		// 类型
		type: 3,
		// 标题
		title: '客户表格头'
	}),

	getters: {

		/** 获取显示的表头数据 */
		tableHeader:state=> state.list.filter((f: any) => f.visible === 0)

	},
	actions: {

		/** 获取 - 客户表格头 */
		getList(){
			// 检查是否有数据
			if (this.isLoad(this.lock, this.list)) {
				this.lock = true
				this.loadList()
			}
			return this.list
		},

		/** 加载 - 客户表格头 */
		async loadList(){
			try{
				const params = {'type': this.type};
				const {data} = await api().query(params);
				// 清除重新加载
				this.checkReset(this.list)
				// 填充数据 - 填充的数据深度绑定，数据库是没有这些字段
				data.map((m:any)=>{
					if (map.has(m.id)){
						m['isFilter'] = map.get(m.id).isFilter
						m['filter'] = map.get(m.id).filter
					}
					return m
				})
				// 排序
				data.sort((a: any, b: any) => b.sort - a.sort)
				// 增量加载 - 直接赋值会导致引用失效
				this.list.push(...data);
			}catch (e:any){
				console.log('获取'+this.title+'列表异常捕获\n',e);
				ElMessage.error(e.message)
			}
			this.lock = false
		},

		/** 批量修改显示或隐藏 - 客户表格头  */
		async batchVisibleByIds(ids:any){
			await this.batchVisible(ids, this.type, api, this.loadList, this.title)
		},

		init(){
			// 检查是否有数据
			if (this.isLoad(this.lock, this.list)) {
				this.lock = true
				this.loadList()
			}
		},

		// 公共方法
		...curdUtils
	},

	persist: {
		// 开启持久化
		enabled: true,
		strategies: [
			{
				key: '17-work-customerTableHeaderCache',
				storage: sessionStorage, // 仅会话期间有效
				paths: ['list']
			},
			// {storage: localStorage, paths: ['']},
		],
	},

});


const fieldObj = (isFilter: any, filter: any) => ({isFilter, filter})

// 客户简称
map.set('17', fieldObj(true, 'search'))
// 联系人
map.set('18', fieldObj(true, 'search'))
// 手机号 - 联系人
map.set('19', fieldObj(true, 'search'))
// 产品线
map.set('20', fieldObj(false, ''))
// 客户阶段
map.set('21', fieldObj(true, 'filter'))
// 最近行动距今
map.set('22', fieldObj(false, ''))
// 预估签约日期
map.set('23', fieldObj(false, ''))
// 金额(元)
map.set('24', fieldObj(false, ''))
// 成功概率
map.set('25', fieldObj(false, ''))
// 客户类型
map.set('26', fieldObj(true, 'filter'))
// 客户经理
map.set('27', fieldObj(true, 'select'))
// 线索来源
map.set('28', fieldObj(true, 'filter'))
// 线索归属人
map.set('2', fieldObj(true, 'filter'))
// 外协公司
map.set('30', fieldObj(false, ''))
// 跟进天数(天)
map.set('31', fieldObj(false, ''))


/*
	 {
                name: '客户简称',
                isFilter: true,
                filter: 'search',
                label: 'shortName',
                remark: '客户名字简称，仅显示填4个汉字，超出的会以省略号表示'
            },{
                name: '联系人',
                isFilter: true,
                filter: 'search',
                label: 'contactName',
                remark: '重点在洽谈的人'
            },{
                name: '手机号',
                isFilter: true,
                label: 'contactPhone',
                filter: 'search',
                remark: '主要联系人的联系方式'
            },{
                name: '产品线',
                isFilter: false,
                label: 'product',
                remark: '你想推荐给客户的产品线（对应详情页的机会）'
            },{
                name: '客户阶段',
                label: 'stageName',
                isFilter: true,
                filter: 'filter',
                remark: '你的客户跟进阶段'
            },{
                name: '最近行动距今',
                isFilter: false,
                label: 'lastestDay',
                remark: '最近一次行动记录距离今天的天数'
            },{
                name: '预估签约日期',
                isFilter: false,
                // label: 'signDate',
                label: 'expectedSignDate',
                remark: '你预计该客户可以签约的日期'
            },{
                name: '金额(元)',
                isFilter: false,
                // label: 'price',
                label: 'expectedSignAmount',
                remark: '你预计该客户可以签约的合作金额'
            },{
                name: '成功概率',
                isFilter: false,
                label: 'probability',
                remark: '你预计该客户可以合作的概率'
            },{
                name: '客户类型',
                isFilter: true,
                label: 'type',
                filter: 'filter',
                remark: '对方是直接使用你的产品，还是代理你的产品，还是代理商的客户'
            },{
                name: '客户经理',
                isFilter: true,
                label: 'manage',
                filter: 'filter',
                remark: '管理客户的销售员'
            },{
                name: '线索来源',
                isFilter: true,
                label: 'source',
                filter: 'filter',
                remark: '这条线索来自哪个渠道'
            },{
                name: '线索归属人',
                isFilter: true,
                label: 'belong',
                filter: 'filter',
                remark: '是谁把该条线索带进来'
            },{
                name: '外协公司',
                isFilter: false,
                label: 'otherOffice',
                remark: '代理商或分销商'
            },{
                name: '跟进天数(天)',
                isFilter: false,
                label: 'days',
                remark: '从你开始联系该客户的日期算起，距离今天的天数'
            }
 */